package threadTestDemo.bank;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class ConcurrentTransferMoney {
    public static void main(String[] args) {




        //关于批量存储DTO对象，选择数组？链表？集合？Map?
        //不选择Map，因为不需要key，
        //不选择集合，因为允许重复，
        //不选择数组，因为要频繁修改，
        //不选择链表，因为要频繁查询，
        //修改是不必要的，查询是必要的，需要遍历，
        //数组要确定下标，太麻烦，
        //必然选择List，是选择原生List、ArrayList、LinkedList，
        //主要还是查询遍历，虽然是顺序遍历，但还是选择ArrayList，
        //操作，遍历添加，遍历查询，

        OperateType operateType=OperateType.reduce;     //枚举类型放外面也会改变，
        BigDecimal changeNumber= BigDecimal.valueOf(10);    //

        List<TransferMoneyDto> dtoList=new ArrayList<TransferMoneyDto>();

        //所以循环累积添加fr是不可行的，只能一次添加N个吗？
        //单独是可行的，但被引用就不行，过程不被写入DTO，最终结果被写入了，

        for (int i = 0; i < 4; i++) {
            if (i % 2 == 0) {
                operateType=OperateType.add;
            } else {
                operateType=OperateType.reduce;
            }

            String accountFrom = "me";
            String accountTo = "you";
            accountFrom=accountFrom+"fr".repeat(i + 1);
            accountTo=accountTo+"To".repeat(i + 1);
            TransferMoneyDto dto = new TransferMoneyDto(accountFrom, accountTo, operateType, changeNumber);
            System.out.println(dto);
            dtoList.add(dto);
        }


//        for (int i = 0; i < 4; i++) {
//            String accountFrom = "me";
//            String accountTo = "you";
//            TransferMoneyDto dto=new TransferMoneyDto(
//                    accountFrom+"fr".repeat(i + 1),
//                    accountTo+"To".repeat(i + 1),
//                    i % 2 == 0 ? OperateType.add : OperateType.reduce,
//                    changeNumber);
//            System.out.println(dto);
//            dtoList.add(dto);
//        }

        //错例
//        StringBuffer accountFrom = "me";
//        StringBuffer accountTo = "you";
//        TransferMoneyDto dto = new TransferMoneyDto(accountFrom, accountTo, operateType, changeNumber);
        //        for (int i = 0; i < 4; i++) {
//          dto.accountFrom=accountFrom.append("fr")
//          dto.accountTo=accountFrom.append("To")
//        if (i % 2 == 0) {
//            operateType=OperateType.add;
//        } else {
//            operateType=OperateType.reduce;
//        }
//            System.out.println(dto);
//            dtoList.add(dto);
//        }

        System.out.println("____________");
        for (TransferMoneyDto dto1:dtoList
        ) {
            System.out.println(dto1);
        }


    }
}
